#include "JSONConfig.h"

JSONConfig::JSONConfig()
{
	strFileName = "";
	pJsonDict = NULL;
}

bool JSONConfig::TheBegin_File(const char* filename)
{
	if (filename == NULL)
		return false;

	strFileName = filename;
	pJsonDict = new gameEx::CSJsonDictionary();
	if (!pJsonDict->initWithFile(strFileName.c_str()))
		return false;

	return true;
}

bool JSONConfig::TheBegin_Description(const char* szData)
{
	if (szData == NULL)
		return false;

	pJsonDict = new gameEx::CSJsonDictionary();
	pJsonDict->initWithDescription(szData);

	return true;
}

void JSONConfig::TheEnd()
{
	pJsonDict->getDescription();
	if (pJsonDict == NULL)
		return;

	delete pJsonDict;
	pJsonDict = NULL;
}

std::string JSONConfig::GetDescription()
{
	if (pJsonDict == NULL)
		return "";

	return pJsonDict->getDescription();
}

bool JSONConfig::SetItemStringValue(std::string strKey, std::string strValue, int nIndex)
{
	if (pJsonDict == NULL)
		return false;

	if (nIndex >= 0)
	{
		CSJson::Value *temp = pJsonDict->getSubValue(nIndex);
		if (temp == NULL || !temp->isObject())
			return false;

		CSJson::Value val = strValue;
		temp->set(strKey.c_str(), val);
	}
	else
	{
		pJsonDict->insertItemToArray(strKey.c_str(), strValue.c_str());
	}

	return true;
}

bool JSONConfig::SetItemIntValue(std::string strKey, int nValue, int nIndex)
{
	if (pJsonDict == NULL)
		return false;

	if (nIndex >= 0)
	{
		CSJson::Value *temp = pJsonDict->getSubValue(nIndex);
		if (temp == NULL && !temp->isObject())
			return false;

		CSJson::Value val = nValue;
		temp->set(strKey.c_str(), val);
	}
	else
	{
		pJsonDict->insertItemToArray(strKey.c_str(), nValue);
	}

	return true;
}

int JSONConfig::GetItemIntValue(std::string strKey, int nDefaultValue, int nIndex)
{
	if (pJsonDict == NULL)
		return nDefaultValue;

	if (nIndex >= 0)
	{
		CSJson::Value *temp = pJsonDict->getSubValue(nIndex);
		if (temp == NULL && !temp->isObject())
			return nDefaultValue;

		CSJson::Value ret = temp->get(strKey.c_str(), m_vDefaultValue);
		if (!ret.isInt())
			return nDefaultValue;

		return ret.asInt();
	}
	else
	{
		return pJsonDict->getItemIntValue(strKey.c_str(), nDefaultValue);
	}
}


bool JSONConfig::GetItemStringValue(std::string strKey, std::string &strRetValue, int nIndex)
{
	if (pJsonDict == NULL)
		return false;

	if (nIndex >= 0)
	{
		CSJson::Value *temp = pJsonDict->getSubValue(nIndex);
		if (temp == NULL && !temp->isObject())
			return false;

		CSJson::Value ret = temp->get(strKey.c_str(), m_vDefaultValue);
		if (!ret.isString())
			return false;

		strRetValue = ret.asCString();
		return true;
	}
	else
	{
		strRetValue = pJsonDict->getItemStringValue(strKey.c_str());
		return true;
	}
}